home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 38 / Amiga Format CD38 (1999-03-15)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-04].iso / -seriously_amiga- / programming / other / cyberxxxsrc / misc / audiosupport.mod < prev    next >
Text File  |  1999-02-08  |  4KB  |  123 lines

  1. MODULE  AudioSupport;
  2.  
  3. (* $StackChk- $OvflChk- $RangeChk- $CaseChk- $ReturnChk- $NilChk- $TypeChk- $OddChk- $ClearVars- *)
  4.  
  5. (* /// ------------------------------- "IMPORT" -------------------------------- *)
  6. IMPORT  au:=Audio,
  7.         e:=Exec,
  8.         es:=ExecSupport,
  9.         g:=Graphics,
  10.         y:=SYSTEM;
  11. (* \\\ ------------------------------------------------------------------------- *)
  12.  
  13. (* /// --------------------------------- "VAR" --------------------------------- *)
  14. VAR     clock: LONGINT;
  15. (* \\\ ------------------------------------------------------------------------- *)
  16.  
  17. (* /// -------------------------------- "CONST" -------------------------------- *)
  18. CONST   bitLeft1 * =0;
  19.         bitLeft2 * =3;
  20.         bitRight1 * =1;
  21.         bitRight2 * =2;
  22.  
  23.         chanLeft1 * =LONGSET{bitLeft1};
  24.         chanLeft2 * =LONGSET{bitLeft2};
  25.         chanRight1 * =LONGSET{bitRight1};
  26.         chanRight2 * =LONGSET{bitRight2};
  27.  
  28.         leftOnly * =chanLeft1+chanLeft2;
  29.         rightOnly * =chanRight1+chanRight2;
  30.  
  31.         channelMap * = "\x03\x05\x0A\x0C"; (* L1+R1, L1+R2, L2+R1, L2+R2 *)
  32.         channelSize * =4;
  33. (* \\\ ------------------------------------------------------------------------- *)
  34.  
  35. (* /// ----------------------- "PROCEDURE WriteAudio()" ------------------------ *)
  36. PROCEDURE WriteAudio * (req: au.IOAudioPtr;
  37.                         data: e.APTR;
  38.                         len: LONGINT;
  39.                         period: LONGINT;
  40.                         volume: INTEGER);
  41. BEGIN
  42.   req.request.command:=e.write;
  43.   req.request.flags:=SHORTSET{au.pervol};
  44.   req.data:=data;
  45.   req.length:=len;
  46.   req.cycles:=1;
  47. (* $RangeChk- *)
  48.   req.period:=SHORT(clock DIV period);
  49. (* $RangeChk= *)
  50.   req.volume:=volume;
  51.   es.BeginIO(req);
  52. END WriteAudio;
  53. (* \\\ ------------------------------------------------------------------------- *)
  54.  
  55. (* /// ----------------------- "PROCEDURE StartAudio()" ------------------------ *)
  56. PROCEDURE StartAudio * (req: au.IOAudioPtr);
  57. BEGIN
  58.   req.request.command:=e.start;
  59.   e.SendIO(req);
  60.   e.WaitPort(req.request.message.replyPort);
  61. END StartAudio;
  62. (* \\\ ------------------------------------------------------------------------- *)
  63.  
  64. (* /// ------------------------ "PROCEDURE StopAudio()" ------------------------ *)
  65. PROCEDURE StopAudio * (req: au.IOAudioPtr);
  66. BEGIN
  67.   req.request.command:=e.stop;
  68.   e.SendIO(req);
  69.   e.WaitPort(req.request.message.replyPort);
  70. END StopAudio;
  71. (* \\\ ------------------------------------------------------------------------- *)
  72.  
  73. (* /// ----------------------- "PROCEDURE ResetAudio()" ------------------------ *)
  74. PROCEDURE ResetAudio * (req: au.IOAudioPtr);
  75. BEGIN
  76.   req.request.command:=e.reset;
  77.   e.SendIO(req);
  78.   e.WaitPort(req.request.message.replyPort);
  79. END ResetAudio;
  80. (* \\\ ------------------------------------------------------------------------- *)
  81.  
  82. (* /// ----------------------- "PROCEDURE FlushAudio()" ------------------------ *)
  83. PROCEDURE FlushAudio * (req: au.IOAudioPtr);
  84. BEGIN
  85.   req.request.command:=e.flush;
  86.   e.SendIO(req);
  87.   e.WaitPort(req.request.message.replyPort);
  88. END FlushAudio;
  89. (* \\\ ------------------------------------------------------------------------- *)
  90.  
  91. (* /// ------------------------ "PROCEDURE CopyUnit()" ------------------------- *)
  92. PROCEDURE CopyUnit * (src: au.IOAudioPtr;
  93.                       dst: au.IOAudioPtr;
  94.                       mask: LONGSET);
  95. BEGIN
  96.   dst.request.device:=src.request.device;
  97.   dst.request.unit:=y.VAL(e.UnitPtr,y.VAL(LONGSET,src.request.unit)*mask);
  98.   dst.allocKey:=src.allocKey;
  99. END CopyUnit;
  100. (* \\\ ------------------------------------------------------------------------- *)
  101.  
  102. (* /// ------------------------ "PROCEDURE SetPerVol()" ------------------------ *)
  103. PROCEDURE SetPerVol * (req: au.IOAudioPtr;
  104.                        period: LONGINT;
  105.                        volume: INTEGER);
  106. BEGIN
  107.   req.request.command:=au.perVol;
  108. (* $RangeChk- *)
  109.   req.period:=SHORT(clock DIV period);
  110. (* $RangeChk= *)
  111.   req.volume:=volume;
  112.   e.SendIO(req);
  113. END SetPerVol;
  114. (* \\\ ------------------------------------------------------------------------- *)
  115.  
  116. BEGIN
  117.   IF g.pal IN g.base.displayFlags THEN
  118.     clock:=3546895;
  119.   ELSE
  120.     clock:=3579545;
  121.   END;
  122. END AudioSupport.
  123.